package com.wx.tgp.designpattern.observerPattern.observer;

/**
 * 观察者模式
 *     观察者模式分为4个角色
 *     1、抽象主题：它把所有的观察者对象的引用保存到一个聚集里，每一个主题都可以有多个观察者。
 *                  抽象主题提供一个接口，可以增加和删除观察者
 *     2、具体主题：将有关状态存入具体观察者对象；在具体主题内部状态改变时，给所有
 *                  登记过的观察者发出通知
 *     3、抽象观察者：为所有的观察者定义一个接口，在得到主题通知时更新自己
 *     4、具体观察者：实现抽象观察者所要求的更新接口，以便使本身的状态与主题对调
 *
 *   应用场景：
 *      比方说某一个商品的价格进行了调整，那么就要对一些顾客进行通知。
 *      具体观察者好比手机，继承了父类observer，
 *      当手机的价位进行调整时调用父类的update()方法，通知所有的顾客
 */
public class ObserverPattern {

    public static void main(String args[]){
        ConcreteSubject subject = new ConcreteSubject();
        subject.Attach(new ConcreteObserver(subject,"Observer_A"));
        subject.Attach(new ConcreteObserver(subject,"Observer_B"));
        subject.Attach(new ConcreteObserver(subject,"Observer_C"));
        subject.setSubjectState("Read");
        subject.notity();
    }
}
